package com.justnow.offer;

/**
 * 请实现一个函数，用来判断一颗二叉树是不是对称的。注意，如果一个二叉树同此二叉树的镜像是同样的，定义其为对称的。
 */
public class Solution28 {
    boolean isSymmetrical(TreeNode pRoot) {

        return isMirror(pRoot, pRoot);
    }

    public boolean isMirror(TreeNode treeNode1, TreeNode treeNode2) {
        if (treeNode1 == null && treeNode2 == null) {
            return true;
        }

        //两者中其中一个为null，因为上一个if语句已经判断了是否同时为null
        if (treeNode1 == null || treeNode2 == null) {
            return false;
        }

        //在这里，我们可以这样看，即如果两个节点相等，同时镜像节点的左右子节点相同，那么就返回true；
        //而总问题和子问题的连接就是根据isMirror函数的返回值来进行连接的
        return (treeNode1.val == treeNode2.val) && isMirror(treeNode1.left, treeNode2.right)
                && isMirror(treeNode1.right, treeNode2.left);
    }


}
